package top.z.work.module.system.convert;

import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryChain;
import com.mybatisflex.core.query.QueryWrapper;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import top.z.work.framework.common.pojo.PageInfo;
import top.z.work.module.system.controller.user.vo.SystemUserCreateVO;
import top.z.work.module.system.controller.user.vo.SystemUserModifyVO;
import top.z.work.module.system.controller.user.vo.SystemUserVO;
import top.z.work.module.system.entity.SystemUser;

import java.util.List;

@Mapper
public interface SystemUserConvert {

    SystemUserConvert INSTANCE = Mappers.getMapper(SystemUserConvert.class);

    default QueryWrapper convert(SystemUserVO parameter) {
        return QueryChain.of(SystemUser.class)
                .eq(SystemUser::getIdentity, parameter.getIdentity())
                .eq(SystemUser::getDeptId, parameter.getDeptId())
                .eq(SystemUser::getUsername, parameter.getUsername())
                .eq(SystemUser::getNickname, parameter.getNickname())
                .eq(SystemUser::getMobile, parameter.getMobile())
                .eq(SystemUser::getStatus, parameter.getStatus())
                .eq(SystemUser::getLoginIp, parameter.getLoginIp())
                .eq(SystemUser::getLoginTime, parameter.getLoginTime())
                ;
    }

    SystemUserVO convert(SystemUser parameter);

    SystemUser convert(SystemUserModifyVO parameter);

    SystemUser convert(SystemUserCreateVO parameter);

    List<SystemUserVO> convert(List<SystemUser> userList);

    default PageInfo<SystemUserVO> convert(Page<SystemUser> page) {
        List<SystemUserVO>     list     = page.getRecords().stream().map(this::convert).toList();
        PageInfo<SystemUserVO> pageInfo = new PageInfo<>();
        pageInfo.setList(list);
        pageInfo.setTotal(page.getTotalRow());
        pageInfo.setSize(page.getPageSize());
        pageInfo.setPage(page.getPageNumber());
        return pageInfo;
    }

}
